<?php
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;
// use \Exception;

class Token
{
    /**
     * 创建Token
     * @param $uid 需要保存的用户身份标识
     * @return String
    **/
    public static function createToken($uid = null) 
    {
        $signer = new Sha256();
        $token = (new Builder())->setIssuer('https://www.baidu.com')
            ->setAudience('httpsp://www.baidu.com')
            ->setId('sxs-4f1g23a12aa', true) //自定义标识
            ->setIssuedAt(time()) //当前时间
            ->setExpiration(time() + (86400 * 30)) //token有效期时长
            ->set('uid', $uid)
            ->sign($signer, 'qcing')
            ->getToken();
            //这里可以做一些其它的操作，例如把Token放入到Redis内存里面缓存起来。
            /** 
             * ......
             * ......
            **/ 
        return (String) $token;     
    }

    /**
     * 检测Token是否过期与篡改
     * @param token
     * @return boolean
    **/
    public static function validateToken($tokan = null) 
    {
        $token = (new Parser())->parse((String) $tokan);
        $signer =  new Sha256();
        if (!$token->verify($signer, 'qcing')) {
            return false; //签名不正确
        }

        $validationData = new ValidationData();
        $validationData->setIssuer('https://www.baidu.com');
        $validationData->setAudience('https://www.baidu.com');
        $validatationData->setId('sxs-4f1g23a12aa');//自字义标识

        return $token->validate($validationData);
    }
}